home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 4
/
Aminet 4 - November 1994.iso
/
aminet
/
comm
/
net
/
dnet2_10_13.lha
/
DNet
/
Amiga
/
Sourcen.lha
/
dnet
/
dataconv.c
< prev
next >
Wrap
Text File
|
1993-01-14
|
2KB
|
150 lines
/*
* DATACONV.C
*
* Data Conversion.
*/
typedef unsigned char ubyte;
typedef unsigned short uword;
typedef unsigned long ulong;
int
Compress7(s, db, n)
ubyte *s;
ubyte *db;
uword n; /* actual source bytes */
{
ubyte *d = db;
while (n) {
*d++ = *s++ << 1;
if (--n == 0)
break;
d[-1] |= *s >> 6;
*d++ = *s++ << 2;
if (--n == 0)
break;
d[-1] |= *s >> 5;
*d++ = *s++ << 3;
if (--n == 0)
break;
d[-1] |= *s >> 4;
*d++ = *s++ << 4;
if (--n == 0)
break;
d[-1] |= *s >> 3;
*d++ = *s++ << 5;
if (--n == 0)
break;
d[-1] |= *s >> 2;
*d++ = *s++ << 6;
if (--n == 0)
break;
d[-1] |= *s >> 1;
*d++ = *s++ << 7;
if (--n == 0)
break;
d[-1] |= *s++;
--n;
}
return(d - db);
}
void
UnCompress7(s, d, n)
ubyte *s;
ubyte *d;
uword n; /* actual destination bytes */
{
while (n) {
*d++ = s[0] >> 1;
if (--n == 0)
break;
*d++ = ((s[0] << 6) | (s[1] >> 2)) & 0x7F;
if (--n == 0)
break;
*d++ = ((s[1] << 5) | (s[2] >> 3)) & 0x7F;
if (--n == 0)
break;
*d++ = ((s[2] << 4) | (s[3] >> 4)) & 0x7F;
if (--n == 0)
break;
*d++ = ((s[3] << 3) | (s[4] >> 5)) & 0x7F;
if (--n == 0)
break;
*d++ = ((s[4] << 2) | (s[5] >> 6)) & 0x7F;
if (--n == 0)
break;
*d++ = ((s[5] << 1) | (s[6] >> 7)) & 0x7F;
if (--n == 0)
break;
*d++ = s[6] & 0x7F;
--n;
s += 7;
}
}
int
Expand6(s, db, n)
ubyte *s;
ubyte *db;
uword n; /* actual source bytes */
{
ubyte *d = db;
while (n) {
*d++ = 0x40 | (*s >> 2);
*d++ = 0x40 | ((*s++ & 3) << 4);
if (--n) {
d[-1] |= *s >> 4;
*d++ = 0x40 | ((*s++ & 0x0F) << 2);
if (--n) {
d[-1] |= *s >> 6;
*d++ = 0x40 | (*s++ & 0x3F);
--n;
}
}
}
return(d - db);
}
void
UnExpand6(s, d, n)
ubyte *s;
ubyte *d;
uword n; /* actual destination bytes */
{
while (n) {
*d++ = (s[0] << 2) | ((s[1] & 0x30) >> 4);
if (--n == 0)
break;
*d++ = (s[1] << 4) | ((s[2] & 0x3C) >> 2);
if (--n == 0)
break;
*d++ = (s[2] << 6) | (s[3] & 0x3F);
--n;
s += 4;
}
}